ããã³ããšã³ãã«ãããä¿¡é ŒããŒã¯ã³çºè¡ã®è€éãªäžçãæ¢ããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãããŒã¯ã³çæã¡ã«ããºã ãé åžæŠç¥ããããŠã°ããŒãã«ãªãŠãŒã¶ãŒã察象ãšããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠè©³ãã解説ããŸãã
ããã³ããšã³ãã«ãããä¿¡é ŒããŒã¯ã³ã®çºè¡ïŒããŒã¯ã³çæãšé åžã®ã°ããŒãã«ãªè©³çŽ°è§£èª¬
仿¥ã®çžäºæ¥ç¶ãããããžã¿ã«ç°å¢ã«ãããŠããªãœãŒã¹ãžã®å®å šãã€å¹ççãªã¢ã¯ã»ã¹ã確ä¿ããããšã¯æãéèŠã§ããããã³ããšã³ãä¿¡é ŒããŒã¯ã³ã¯ãçŸä»£ã®Webããã³ã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ã¢ãŒããã¯ãã£ã«ãããŠéèŠãªèŠçŽ ãšããŠç»å ŽããŸããããããã®ããŒã¯ã³ã¯ããžã¿ã«ãªèªèšŒæ å ±ãšããŠæ©èœããã·ã¹ãã ãã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ããšå¯Ÿè©±ãããŠãŒã¶ãŒããµãŒãã¹ã®ã¢ã€ãã³ãã£ãã£ãšæš©éãæ€èšŒããããšãå¯èœã«ããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãããã³ããšã³ãä¿¡é ŒããŒã¯ã³çºè¡ã®è€éããããã²ãŒãããã°ããŒãã«ãªèŠç¹ããããŒã¯ã³çæãšé åžã®åºæ¬çãªããã»ã¹ã«çŠç¹ãåœãŠãŸãã
ããã³ããšã³ãä¿¡é ŒããŒã¯ã³ã®çè§£
ããã³ããšã³ãä¿¡é ŒããŒã¯ã³ã¯ããã®æ žå¿ã«ãããŠãèªèšŒãµãŒããŒã«ãã£ãŠçºè¡ãããã¯ã©ã€ã¢ã³ãïŒããã³ããšã³ãïŒããAPIããªãœãŒã¹ãµãŒããŒã«æç€ºãããããŒã¿ã®äžéšïŒéåžžã¯æååïŒã§ãããã®ããŒã¯ã³ã¯ãã¯ã©ã€ã¢ã³ããèªèšŒãããç¹å®ã®æäœãå®è¡ãããç¹å®ã®ããŒã¿ã«ã¢ã¯ã»ã¹ãããããæš©éãããããšã確èªããŸããåŸæ¥ã®ã»ãã·ã§ã³ã¯ãããŒãšã¯ç°ãªããä¿¡é ŒããŒã¯ã³ã¯ãã°ãã°ã¹ããŒãã¬ã¹ã«ãªãããã«èšèšãããŠããããµãŒããŒãååå¥ã®ããŒã¯ã³ã®ã»ãã·ã§ã³ç¶æ ãç¶æããå¿ èŠããªãããšãæå³ããŸãã
ä¿¡é ŒããŒã¯ã³ã®äž»ãªç¹åŸŽïŒ
- æ€èšŒå¯èœæ§ïŒ ããŒã¯ã³ã¯ããã®çæ£æ§ãšå®å šæ§ãä¿èšŒããããã«ãªãœãŒã¹ãµãŒããŒã«ãã£ãŠæ€èšŒå¯èœã§ãªããã°ãªããŸããã
- äžææ§ïŒ åããŒã¯ã³ã¯ããªãã¬ã€æ»æãé²ãããã«äžæã§ãªããã°ãªããŸããã
- éå®ãããã¹ã³ãŒãïŒ ããŒã¯ã³ã¯ãçæ³çã«ã¯å®çŸ©ãããæš©éã®ã¹ã³ãŒããæã¡ãå¿ èŠãªã¢ã¯ã»ã¹ã®ã¿ãèš±å¯ãã¹ãã§ãã
- æå¹æéïŒ ããŒã¯ã³ã¯ã䟵害ãããèªèšŒæ å ±ãç¡æéã«æå¹ã§ããç¶ãããªã¹ã¯ã軜æžããããã«ãæéã®å¯¿åœãæã€ã¹ãã§ãã
ããŒã¯ã³çæã®éèŠãªåœ¹å²
ä¿¡é ŒããŒã¯ã³ãçæããããã»ã¹ã¯ããã®ã»ãã¥ãªãã£ãšä¿¡é Œæ§ã®åºç€ã§ããå ç¢ãªçæã¡ã«ããºã ã¯ãããŒã¯ã³ãäžæã§ãæ¹ããäžå¯èœã§ãããå®çŸ©ãããã»ãã¥ãªãã£åºæºã«æºæ ããŠããããšãä¿èšŒããŸããçææ¹æ³ã®éžæã¯ããã°ãã°åºç€ãšãªãã»ãã¥ãªãã£ã¢ãã«ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«äŸåããŸãã
äžè¬çãªããŒã¯ã³çææŠç¥ïŒ
ä¿¡é ŒããŒã¯ã³ã®çæã«ã¯ãããããã«å©ç¹ãšèæ ®äºé ãããããã€ãã®æ¹æ³è«ãæ¡çšãããŠããŸãïŒ
1. JSON Web Token (JWT)
JWTã¯ãæ å ±ãåœäºè éã§JSONãªããžã§ã¯ããšããŠå®å šã«éä¿¡ããããã®æ¥çæšæºã§ããã³ã³ãã¯ãã§èªå·±å®çµåã§ãããããã¹ããŒãã¬ã¹èªèšŒã«çæ³çã§ããJWTã¯éåžžãããããŒããã€ããŒãã眲åã®3ã€ã®éšåããæ§æããããã¹ãŠBase64Urlã§ãšã³ã³ãŒãããããããã§åºåãããŠããŸãã
- ããããŒïŒ 眲åã«äœ¿çšãããã¢ã«ãŽãªãºã ïŒäŸïŒHS256ãRS256ïŒãªã©ãããŒã¯ã³ã«é¢ããã¡ã¿ããŒã¿ãå«ãŸããŸãã
- ãã€ããŒãïŒ ãšã³ãã£ãã£ïŒéåžžã¯ãŠãŒã¶ãŒïŒã«é¢ããã¹ããŒãã¡ã³ãã§ããã¯ã¬ãŒã ãšè¿œå ããŒã¿ãå«ãŸããŸããäžè¬çãªã¯ã¬ãŒã ã«ã¯ãçºè¡è ïŒissïŒãæå¹æéïŒexpïŒããµããžã§ã¯ãïŒsubïŒããªãŒãã£ãšã³ã¹ïŒaudïŒããããŸããã«ã¹ã¿ã ã¯ã¬ãŒã ã远å ããŠãã¢ããªã±ãŒã·ã§ã³åºæã®æ å ±ãä¿åããããšãã§ããŸãã
- 眲åïŒ JWTã®éä¿¡è ãæ¬äººã§ããããšã確èªããã¡ãã»ãŒãžãéäžã§å€æŽãããŠããªãããšãä¿èšŒããããã«äœ¿çšãããŸãã眲åã¯ããšã³ã³ãŒããããããããŒããšã³ã³ãŒãããããã€ããŒããã·ãŒã¯ã¬ããïŒHS256ã®ãããªå¯Ÿç§°ã¢ã«ãŽãªãºã ã®å ŽåïŒãŸãã¯ç§å¯éµïŒRS256ã®ãããªé察称ã¢ã«ãŽãªãºã ã®å ŽåïŒãååŸããããããŒã§æå®ãããã¢ã«ãŽãªãºã ã䜿çšããŠçœ²åããããšã«ãã£ãŠäœæãããŸãã
JWTãã€ããŒãã®äŸïŒ
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
JWTã«é¢ããã°ããŒãã«ãªèæ ®äºé ïŒ
- ã¢ã«ãŽãªãºã ã®éžæïŒ é察称ã¢ã«ãŽãªãºã ïŒRS256ãES256ïŒã䜿çšããå Žåãæ€èšŒã«äœ¿çšãããå ¬ééµãã°ããŒãã«ã«é åžã§ãããããä¿¡é ŒãããèªèšŒå±ã«ãã£ãŠçºè¡ãããããŒã¯ã³ããç§å¯éµãå ±æããããšãªãä»»æã®ãªãœãŒã¹ãµãŒããŒã§æ€èšŒã§ããŸããããã¯ãå€§èŠæš¡ãªåæ£ã·ã¹ãã ã«ãšã£ãŠéåžžã«éèŠã§ãã
- æå»åæïŒ ããŒã¯ã³ã®çºè¡ãšæ€èšŒã«é¢ãããã¹ãŠã®ãµãŒããŒéã§ã®æ£ç¢ºãªæå»åæã¯ãç¹ã«ãexpãïŒæå¹æéïŒã®ãããªæéäŸåã®ã¯ã¬ãŒã ã«ãšã£ãŠäžå¯æ¬ ã§ããäžäžèŽã¯ãæå¹ãªããŒã¯ã³ãæåŠãããããæéåãã®ããŒã¯ã³ãåãå ¥ãããããããåå ãšãªãå¯èœæ§ããããŸãã
- éµç®¡çïŒ ç§å¯éµïŒçœ²åçšïŒãšå ¬ééµïŒæ€èšŒçšïŒãå®å šã«ç®¡çããããšãæãéèŠã§ããã°ããŒãã«ãªçµç¹ã¯ãå ç¢ãªéµã®ããŒããŒã·ã§ã³ããã³å€±å¹ããªã·ãŒãæã€å¿ èŠããããŸãã
2. OpaqueããŒã¯ã³ïŒã»ãã·ã§ã³ããŒã¯ã³ / åç §ããŒã¯ã³ïŒ
JWTãšã¯ç°ãªããOpaqueããŒã¯ã³ã¯ãããŒã¯ã³èªäœã«ãŠãŒã¶ãŒããã®æš©éã«é¢ããæ å ±ãå«ã¿ãŸããã代ããã«ããµãŒããŒã«ä¿åãããŠããã»ãã·ã§ã³ãããŒã¯ã³æ å ±ãžã®åç §ãšããŠæ©èœããã©ã³ãã ãªæååã§ããã¯ã©ã€ã¢ã³ããOpaqueããŒã¯ã³ãæç€ºãããšããµãŒããŒã¯é¢é£ããŒã¿ãæ€çŽ¢ããŠãªã¯ãšã¹ããèªèšŒããã³èªå¯ããŸãã
- çæïŒ OpaqueããŒã¯ã³ã¯éåžžãæå·åŠçã«å®å šãªã©ã³ãã ãªæååãšããŠçæãããŸãã
- æ€èšŒïŒ ãªãœãŒã¹ãµãŒããŒã¯ãããŒã¯ã³ãæ€èšŒããé¢é£ããã¯ã¬ãŒã ãååŸããããã«ãèªèšŒãµãŒããŒïŒãŸãã¯å ±æã»ãã·ã§ã³ã¹ãã¢ïŒãšéä¿¡ããå¿ èŠããããŸãã
OpaqueããŒã¯ã³ã®å©ç¹ïŒ
- ã»ãã¥ãªãã£ã®åŒ·åïŒ ããŒã¯ã³èªäœãæ©å¯æ å ±ãæããã«ããªãããã察å¿ãããµãŒããŒåŽã®ããŒã¿ãªãã§ãã£ããã£ãããå Žåã®åœ±é¿ã¯å°ãªããªããŸãã
- æè»æ§ïŒ ãµãŒããŒåŽã®ã»ãã·ã§ã³ããŒã¿ã¯ãããŒã¯ã³èªäœãç¡å¹ã«ããããšãªãåçã«æŽæ°ã§ããŸãã
OpaqueããŒã¯ã³ã®æ¬ ç¹ïŒ
- ã¬ã€ãã³ã·ã®å¢å ïŒ æ€èšŒã®ããã«èªèšŒãµãŒããŒãžã®è¿œå ã®ã©ãŠã³ãããªãããå¿ èŠãšãªããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- ã¹ããŒããã«ãªæ§è³ªïŒ ãµãŒããŒã¯ç¶æ ãç¶æããå¿ èŠããããããã¯éåžžã«ã¹ã±ãŒã©ãã«ãªåæ£ã¢ãŒããã¯ãã£ã«ãšã£ãŠã¯èª²é¡ãšãªãå¯èœæ§ããããŸãã
OpaqueããŒã¯ã³ã«é¢ããã°ããŒãã«ãªèæ ®äºé ïŒ
- 忣ãã£ãã·ã³ã°ïŒ ã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãç°ãªãå°ççå°åã§ã®ã¬ã€ãã³ã·ãåæžããããã©ãŒãã³ã¹ãç¶æããããã«ãããŒã¯ã³æ€èšŒããŒã¿ã®åæ£ãã£ãã·ã³ã°ãå®è£ ããããšãäžå¯æ¬ ã§ããRedisãMemcachedãªã©ã®æè¡ãå©çšã§ããŸãã
- å°åå¥èªèšŒãµãŒããŒïŒ ç°ãªãå°åã«èªèšŒãµãŒããŒãå±éããããšã§ããããã®å°åããçºä¿¡ãããããŒã¯ã³æ€èšŒãªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãåæžããã®ã«åœ¹ç«ã¡ãŸãã
3. APIããŒ
APIããŒã¯ãµãŒããŒéã®éä¿¡ã§ãã䜿çšãããŸãããç¹å®ã®APIã«ã¢ã¯ã»ã¹ããããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã®ããã®ä¿¡é ŒããŒã¯ã³ã®äžåœ¢æ ãšããŠãæ©èœããŸãããããã¯éåžžãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒãAPIãããã€ããŒã«èå¥ãããããã®ãé·ããŠã©ã³ãã ãªæååã§ãã
- çæïŒ APIãããã€ããŒã«ãã£ãŠçæãããå€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ããããžã§ã¯ãããšã«äžæã§ãã
- æ€èšŒïŒ APIãµãŒããŒã¯ããŒããã®ã¬ãžã¹ããªãšç §åããŠãåŒã³åºãå ãèå¥ãããã®æš©éãæ±ºå®ããŸãã
ã»ãã¥ãªãã£äžã®æžå¿µïŒ APIããŒãããã³ããšã³ãã§å ¬éããããšãéåžžã«è匱ã«ãªããŸãããããã¯çްå¿ã®æ³šæãæã£ãŠæ±ãããã¹ãã§ãããçæ³çã«ã¯ãã©ãŠã¶ããçŽæ¥æ©å¯æ§ã®é«ãæäœã«ã¯äœ¿çšãããã¹ãã§ã¯ãããŸãããããã³ããšã³ãã§ã®äœ¿çšã«ã¯ãé²åºãå¶éããæ¹æ³ã§åã蟌ãŸããããä»ã®ã»ãã¥ãªãã£å¯Ÿçãšçµã¿åããããããããããšããããããŸãã
APIããŒã«é¢ããã°ããŒãã«ãªèæ ®äºé ïŒ
- ã¬ãŒãå¶éïŒ ä¹±çšãé²ããããAPIãããã€ããŒã¯ãã°ãã°APIããŒã«åºã¥ããŠã¬ãŒãå¶éãå®è£ ããŸããããã¯ãŠãŒã¶ãŒã®å Žæã«é¢ä¿ãªãé©çšããããããã°ããŒãã«ãªæžå¿µäºé ã§ãã
- IPãã¯ã€ããªã¹ãç»é²ïŒ ã»ãã¥ãªãã£ã匷åãããããAPIããŒãç¹å®ã®IPã¢ãã¬ã¹ãŸãã¯ç¯å²ã«é¢é£ä»ããããšãã§ããŸããããã«ã¯ãIPã¢ãã¬ã¹ã倿Žããããã倧ããç°ãªã£ããããå¯èœæ§ãããã°ããŒãã«ãªæèã§ã®æ éãªç®¡çãå¿ èŠã§ãã
ããŒã¯ã³é åžã®æè¡
ä¿¡é ŒããŒã¯ã³ãçæããããããããã¯ã©ã€ã¢ã³ãïŒããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ïŒã«å®å šã«é åžãããã®åŸãªãœãŒã¹ãµãŒããŒã«æç€ºããå¿ èŠããããŸããé åžã¡ã«ããºã ã¯ãããŒã¯ã³ã®æŒæŽ©ãé²ããæ£åœãªã¯ã©ã€ã¢ã³ãã®ã¿ãããŒã¯ã³ãåãåãããšãä¿èšŒããäžã§éèŠãªåœ¹å²ãæãããŸãã
äž»ãªé åžãã£ãã«ã𿹿³ïŒ
1. HTTPããããŒ
ä¿¡é ŒããŒã¯ã³ãé åžããã³éä¿¡ããããã®æãäžè¬çã§æšå¥šãããæ¹æ³ã¯ãHTTPããããŒãç¹ã« `Authorization` ããããŒãä»ããæ¹æ³ã§ãããã®ã¢ãããŒãã¯ãOAuth 2.0ãJWTãªã©ãããŒã¯ã³ããŒã¹ã®èªèšŒã®æšæºçãªæ £è¡ã§ãã
- ãã¢ã©ãŒããŒã¯ã³ïŒ ããŒã¯ã³ã¯éåžžããBearer ããšãããã¬ãã£ãã¯ã¹ãä»ããŠéä¿¡ãããã¯ã©ã€ã¢ã³ããèªå¯ããŒã¯ã³ãææããŠããããšã瀺ããŸãã
HTTPãªã¯ãšã¹ãããããŒã®äŸïŒ
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
HTTPããããŒã«é¢ããã°ããŒãã«ãªèæ ®äºé ïŒ
- ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒïŒ ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ããŒã¯ã³ãé åžããéãCDNã¯éçã¢ã»ããããã£ãã·ã¥ã§ããŸãããéåžžãæ©å¯æ§ã®é«ãããŒã¯ã³ãå«ãåçãªã¬ã¹ãã³ã¹ã¯ãã£ãã·ã¥ããŸãããããŒã¯ã³ã¯éåžžãèªèšŒãããã»ãã·ã§ã³ããšã«çæããããªãªãžã³ãµãŒããŒããçŽæ¥éä¿¡ãããŸãã
- ãããã¯ãŒã¯ã¬ã€ãã³ã·ïŒ ããŒã¯ã³ããµãŒããŒããã¯ã©ã€ã¢ã³ããžããããŠåã³ãµãŒããŒãžç§»åããã®ã«ãããæéã¯ãå°ççãªè·é¢ã«ãã£ãŠåœ±é¿ãåããå¯èœæ§ããããŸããããã¯ãå¹ççãªããŒã¯ã³çæãšéä¿¡ãããã³ã«ã®éèŠæ§ã匷調ããŠããŸãã
2. ã»ãã¥ã¢ãªCookie
Cookieã䜿çšããŠä¿¡é ŒããŒã¯ã³ãä¿åããã³éä¿¡ããããšãã§ããŸãããã ãããã®æ¹æ³ã§ã¯ã»ãã¥ãªãã£ã確ä¿ããããã«æ éãªèšå®ãå¿ èŠã§ãã
- HttpOnlyãã©ã°ïŒ
HttpOnlyãã©ã°ãèšå®ãããšãJavaScriptãCookieã«ã¢ã¯ã»ã¹ã§ããªããªããã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒæ»æã«ããããŒã¯ã³çé£ã®ãªã¹ã¯ã軜æžããŸãã - Secureãã©ã°ïŒ
Secureãã©ã°ã¯ãCookieãHTTPSæ¥ç¶ãä»ããŠã®ã¿éä¿¡ãããããšãä¿èšŒããçèŽããä¿è·ããŸãã - SameSite屿§ïŒ
SameSite屿§ã¯ãã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒæ»æããã®ä¿è·ã«åœ¹ç«ã¡ãŸãã
Cookieã«é¢ããã°ããŒãã«ãªèæ ®äºé ïŒ
- ãã¡ã€ã³ãšãã¹ïŒ Cookieã®ãã¡ã€ã³ãšãã¹ã®å±æ§ãæ éã«èšå®ããããšã¯ãç°ãªããµããã¡ã€ã³ãã¢ããªã±ãŒã·ã§ã³ã®åéšåã«ããã£ãŠæ£ãããµãŒããŒã«éä¿¡ãããããšãä¿èšŒããããã«äžå¯æ¬ ã§ãã
- ãã©ãŠã¶ã®äºææ§ïŒ åºããµããŒããããŠããŸãããCookie屿§ã®ãã©ãŠã¶å®è£ ã¯æã ç°ãªãå Žåããããç°ãªãå°åããã©ãŠã¶ããŒãžã§ã³ã§ã®åŸ¹åºçãªãã¹ããå¿ èŠã§ãã
3. Local Storage / Session StorageïŒçްå¿ã®æ³šæãæã£ãŠäœ¿çšããŠãã ããïŒïŒ
ãã©ãŠã¶ã®localStorageãsessionStorageã«ä¿¡é ŒããŒã¯ã³ãä¿åããããšã¯ãç¹ã«æ©å¯æ§ã®é«ãããŒã¯ã³ã«ã€ããŠã¯ãã»ãã¥ãªãã£äžã®çç±ããäžè¬çã«æšå¥šãããŸããããããã®ã¹ãã¬ãŒãžã¡ã«ããºã ã¯JavaScriptãä»ããŠã¢ã¯ã»ã¹å¯èœã§ãããããXSSæ»æã«å¯ŸããŠè匱ã§ãã
ã©ã®ãããªå Žåã«æ€èšããããïŒ éåžžã«ç¹æ®ã§éå®çãªäœ¿çšã·ããªãªã«ãããŠãããŒã¯ã³ã®ã¹ã³ãŒããæ¥µç«¯ã«çãããªã¹ã¯ãç¶¿å¯ã«è©äŸ¡ãããŠããå Žåã«ãéçºè ã¯ãã®æ¹æ³ãéžæããããšããããŸããããããHTTPããããŒãã»ãã¥ã¢ãªCookieã䜿çšããæ¹ããã»ãšãã©åžžã«åªããå®è·µæ¹æ³ã§ãã
ã°ããŒãã«ãªèæ
®äºé
ïŒ localStorageããã³sessionStorageã®ã»ãã¥ãªãã£è匱æ§ã¯æ®éçã§ãããç¹å®ã®å°åã«éå®ããããã®ã§ã¯ãããŸãããXSSæ»æã®ãªã¹ã¯ã¯ããŠãŒã¶ãŒã®å°ççãªå Žæã«é¢ä¿ãªãäžå®ã§ãã
ããŒã¯ã³çºè¡ã®ã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹
éžæãããçæããã³é åžæ¹æ³ã«é¢ä¿ãªããå ç¢ãªã»ãã¥ãªãã£ãã©ã¯ãã£ã¹ã«åŸãããšã¯è²ããŸããã
1. ãã¹ãŠã®å Žæã§HTTPSã䜿çšãã
ã¯ã©ã€ã¢ã³ããèªèšŒãµãŒããŒããªãœãŒã¹ãµãŒããŒéã®ãã¹ãŠã®éä¿¡ã¯ãHTTPSã䜿çšããŠæå·åããå¿ èŠããããŸããããã«ãããäžéè æ»æã«ãã転éäžã®ããŒã¯ã³ã®ååãé²ããŸãã
2. ããŒã¯ã³ã®æå¹æéãšæŽæ°ã¡ã«ããºã ãå®è£ ãã
çåœã®ã¢ã¯ã»ã¹ããŒã¯ã³ã¯äžå¯æ¬ ã§ããã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéãåããå Žåããªãã¬ãã·ã¥ããŒã¯ã³ïŒéåžžã¯ããé·åœã§ãããå®å šã«ä¿åãããïŒã䜿çšããŠããŠãŒã¶ãŒã«åèªèšŒãèŠæ±ããããšãªãæ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãååŸã§ããŸãã
3. 匷åãªçœ²åéµãšã¢ã«ãŽãªãºã
JWTã®å Žåã匷åã§äžæãªçœ²åéµã䜿çšããå ¬ééµãæ€èšŒã®ããã«åºãé åžã§ãããç§å¯éµã¯çºè¡è ã§å®å šã«ä¿ãããé察称ã¢ã«ãŽãªãºã ïŒRS256ãES256ãªã©ïŒã®äœ¿çšãæ€èšããŠãã ãããäºæž¬å¯èœãªã·ãŒã¯ã¬ãããæã€HS256ã®ãããªåŒ±ãã¢ã«ãŽãªãºã ã¯é¿ããŠãã ããã
4. ããŒã¯ã³ã®çœ²åãšã¯ã¬ãŒã ã峿 Œã«æ€èšŒãã
ãªãœãŒã¹ãµãŒããŒã¯ãããŒã¯ã³ãæ¹ãããããŠããªãããšã確èªããããã«ãåžžã«ããŒã¯ã³ã®çœ²åãæ€èšŒããªããã°ãªããŸãããããã«ãçºè¡è ããªãŒãã£ãšã³ã¹ãæå¹æéãªã©ããã¹ãŠã®é¢é£ããã¯ã¬ãŒã ãæ€èšŒãã¹ãã§ãã
5. ããŒã¯ã³ã®å€±å¹ãå®è£ ãã
JWTã®ãããªã¹ããŒãã¬ã¹ããŒã¯ã³ã¯ãäžåºŠçºè¡ããããšå³åº§ã«å€±å¹ãããããšãé£ããå ŽåããããŸãããéèŠãªã·ããªãªã®ããã«ã¯ã¡ã«ããºã ãèšããã¹ãã§ããããã«ã¯ã倱å¹ããããŒã¯ã³ã®ãã©ãã¯ãªã¹ããç¶æããããããçãæå¹æéãšå ç¢ãªãªãã¬ãã·ã¥ããŒã¯ã³æŠç¥ãçµã¿åããããããããšãå«ãŸããŸãã
6. ããŒã¯ã³ãã€ããŒãã®æ å ±ãæå°éã«ãã
ç¹ã«ãå ¬éãããå¯èœæ§ã®ããOpaqueããŒã¯ã³ãããã°ã«èšé²ãããå¯èœæ§ã®ããJWTã®å ŽåãããŒã¯ã³ã®ãã€ããŒãã«æ©å¯æ§ã®é«ãå人è奿 å ±ïŒPIIïŒãçŽæ¥å«ããããšã¯é¿ããŠãã ããã代ããã«ãæ©å¯ããŒã¿ããµãŒããŒåŽã«ä¿åããããŒã¯ã³ã«ã¯å¿ èŠãªèå¥åãã¹ã³ãŒãã®ã¿ãå«ããããã«ããŠãã ããã
7. CSRFæ»æããä¿è·ãã
ããŒã¯ã³é
åžã«Cookieã䜿çšããå Žåã¯ãSameSite屿§ãé©åã«èšå®ãããŠããããšã確èªããŠãã ãããããããŒã§ããŒã¯ã³ã䜿çšããå Žåã¯ãã·ã³ã¯ããã€ã¶ãŒããŒã¯ã³ããã®ä»ã®CSRF鲿¢ã¡ã«ããºã ãé©åã«å®è£
ããŠãã ããã
8. å®å šãªéµç®¡ç
ããŒã¯ã³ã®çœ²åãæå·åã«äœ¿çšãããéµã¯ãå®å šã«ä¿åããã³ç®¡çãããªããã°ãªããŸãããããã«ã¯ã宿çãªããŒããŒã·ã§ã³ãã¢ã¯ã»ã¹å¶åŸ¡ãäžæ£ã¢ã¯ã»ã¹ããã®ä¿è·ãå«ãŸããŸãã
ã°ããŒãã«ãªå®è£ ã«é¢ããèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ããã³ããšã³ãä¿¡é ŒããŒã¯ã³ã·ã¹ãã ãèšèšããã³å®è£ ããéã«ã¯ãããã€ãã®èŠå ãé¢ä¿ããŠããŸãïŒ
1. å°åã®ããŒã¿äž»æš©ãšã³ã³ãã©ã€ã¢ã³ã¹
åœã«ãã£ãŠããŒã¿ãã©ã€ãã·ãŒèŠå¶ã¯ç°ãªããŸãïŒäŸïŒãšãŒãããã®GDPRãã«ãªãã©ã«ãã¢ã®CCPAããã©ãžã«ã®LGPDïŒãããŒã¯ã³ã®çºè¡ãšä¿åã®å®è·µããããã®èŠå¶ã«æºæ ããŠããããšã確èªããŠãã ãããç¹ã«ãããŒã¯ã³ã«é¢é£ä»ãããããŠãŒã¶ãŒããŒã¿ãåŠçããã³ä¿åãããå Žæã«é¢ããŠæ³šæãå¿ èŠã§ãã
2. ã€ã³ãã©ã¹ãã©ã¯ãã£ãšã¬ã€ãã³ã·
ã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ãæã€ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¬ã€ãã³ã·ãæå°éã«æããããã«ãè€æ°ã®å°ççå°åã«èªèšŒããã³ãªãœãŒã¹ãµãŒããŒãå±éããããšããã°ãã°å¿ èŠã«ãªããŸããããã«ã¯ã忣ãµãŒãã¹ã管çãããã¹ãŠã®å°åã§äžè²«ããã»ãã¥ãªãã£ããªã·ãŒã確ä¿ã§ããå ç¢ãªã€ã³ãã©ã¹ãã©ã¯ãã£ãå¿ èŠã§ãã
3. æå»åæ
ããŒã¯ã³ã®çæãé åžãæ€èšŒã«é¢ãããã¹ãŠã®ãµãŒããŒéã§ã®æ£ç¢ºãªæå»åæã¯äžå¯æ¬ ã§ãããããã¯ãŒã¯ã¿ã€ã ãããã³ã«ïŒNTPïŒãå®è£ ããããŒã¯ã³ã®æå¹æéãæå¹æ§ã«é¢é£ããåé¡ã鲿¢ããããã«å®æçã«ç£èŠããå¿ èŠããããŸãã
4. èšèªãšæåçãªãã¥ã¢ã³ã¹
ããŒã¯ã³èªäœã¯éåžžãOpaqueãªæååãŸãã¯JWTã®ãããªæ§é åããã圢åŒã§ãããèªèšŒããã»ã¹ã®ãŠãŒã¶ãŒåãã®åŽé¢ïŒäŸïŒããŒã¯ã³æ€èšŒã«é¢é£ãããšã©ãŒã¡ãã»ãŒãžïŒã¯ãããŒã«ã©ã€ãºãããæåçã«é æ ®ãããã¹ãã§ãããã ããããŒã¯ã³çºè¡ã®æè¡çãªåŽé¢ã¯æšæºåãããŠããã¹ãã§ãã
5. 倿§ãªããã€ã¹ãšãããã¯ãŒã¯ç¶æ³
ã°ããŒãã«ã«ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ãããŠãŒã¶ãŒã¯ãããŸããŸãªããã€ã¹ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããããã¯ãŒã¯ç¶æ³ããã¢ã¯ã»ã¹ããŸããããŒã¯ã³ã®çæãšé åžã¡ã«ããºã ã¯ãäœéãªãããã¯ãŒã¯ãæ§èœã®äœãããã€ã¹ã§ãè¯å¥œã«æ©èœããããã«ã軜éã§å¹ççã§ããã¹ãã§ãã
çµè«
çæãšé åžã®äž¡æ¹ãå«ãããã³ããšã³ãä¿¡é ŒããŒã¯ã³ã®çºè¡ã¯ãçŸä»£ã®Webã»ãã¥ãªãã£ã®åºç€ã§ããJWTãOpaqueããŒã¯ã³ãªã©ã®ç°ãªãããŒã¯ã³ã¿ã€ãã®ãã¥ã¢ã³ã¹ãçè§£ããå ç¢ãªã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããããšã§ãéçºè ã¯å®å šã§ã¹ã±ãŒã©ãã«ããã€ã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããããã§èª¬æããååã¯æ®éçã§ããããã®å®è£ ã«ã¯ã倿§ãªåœéçãªãªãŒãã£ãšã³ã¹ã«å¹æçã«ãµãŒãã¹ãæäŸããããã«ãå°åã®ã³ã³ãã©ã€ã¢ã³ã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæ éã«èæ ®ããå¿ èŠããããŸãã
äž»ãªãã€ã³ãïŒ
- ã»ãã¥ãªãã£ãåªå ããïŒ åžžã«HTTPSãçãããŒã¯ã³ã®å¯¿åœã匷åãªæå·åæ¹åŒã䜿çšããŠãã ããã
- è³¢æã«éžæããïŒ ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ãšã¹ã±ãŒã©ããªãã£ã®ããŒãºã«åã£ãããŒã¯ã³çæããã³é åžæ¹æ³ãéžæããŠãã ããã
- ã°ããŒãã«ãªèŠç¹ãæã€ïŒ åœéçãªãªãŒãã£ãšã³ã¹åãã«èšèšããéã«ã¯ãããŸããŸãªèŠå¶ãã€ã³ãã©ã®ããŒãºãæœåšçãªã¬ã€ãã³ã·ãèæ ®ããŠãã ããã
- ç¶ç¶çãªèŠæïŒ ã»ãã¥ãªãã£ã¯ç¶ç¶çãªããã»ã¹ã§ããæ°ããªè åšã«å ãããããã«ãããŒã¯ã³ç®¡çæŠç¥ã宿çã«èŠçŽããæŽæ°ããŠãã ããã